<?php
class Seccion
{
    var $Estilo_Titulos     = 'titulos';

	var $sql_query  = '';
    var $query;
    var $conn;

    var $nombre     = '';
    var $titulo     = array();

    var $CellSpacing = 0;
    var $CellPadding = 0;
    var $Width       = '';
    var $Class       = '';

    var $Debug      = 1;

    var $max_por_pagina     = 30;
    var $pagina             = 0;
    var $paginacion         = 0;
    var $paginacion_estilo  = '';
    var $actual             = 0;
    var $cant_total_filas   = 0;
    var $cant_total_paginas = 0;

    var $orden        = 0;
    var $orden_por    = '';

    var $existe_limit = 0;
    var $limit        = '';

    var $Selectores       = array();
    var $Selector_default = 0;
    var $Cant_selectores  = 0;

    var $i = 0;

    function Crear_Seccion($sql_query = '', $titulos = array(), $atributos = array())
    {
    	global $conn;
        $this->conn = $conn;
        if (!$this->conn)
        {
        	Debug::Mostrar('Al conectar al Host');
            exit();
        }
        $this->titulo = $titulos;
        $this->sql_query = $sql_query;

        $this->order_by['campo'] = $_REQUEST['order_by'];
        $this->order_by['tipo']  = empty($_REQUEST['orderType']) ? 0 : $_REQUEST['orderType'];

        $this->Cargar_Atributos($atributos);
        $this->page = $_REQUEST['page'];
        $this->nombre = $_REQUEST['page'];

    }
    function Cargar_Atributos($atributos)
    {
    	$this->tabla      = $atributos['tabla'];
    	$this->primaryKey = $atributos['primaryKey'];
        if ($atributos['paginacion'])
        {
        	$this->paginacion = 1;
	        if (!empty($atributos['paginacion_estilo']))
	        {
	            $this->paginacion_estilo = $atributos['paginacion_estilo'];
            }
            if (!empty($_REQUEST['pagina']))
	        {
	            $this->pagina = $_REQUEST['pagina'];
            } else {
	            $this->pagina = 1;
            }
	        if (!empty($atributos['max_por_pagina']))
	        {
	            $this->max_por_pagina = $atributos['max_por_pagina'];
            }
	        if (!empty($atributos['cant_total_filas']))
	        {
	            $this->cant_total_filas = $atributos['cant_total_filas'];
            }
	        if (!empty($atributos['sql_total_filas']))
	        {
              	$aux_query = @mysql_query($atributos['sql_total_filas'], $this->conn);
                $error     = @mysql_error($this->conn);
                if (!empty($error))
                {
                	Debug::Mostrar("Se ha producido un error en una consulta a la Base de Datos - Error 1: sql_total_filas<br>".$atributos['sql_total_filas']."<br>".$error);
                }
	            list($this->cant_total_filas) = @mysql_fetch_row($aux_query);
            }

            $this->actual = ($this->pagina - 1) * $this->max_por_pagina;
            $this->cant_total_paginas = ceil($this->cant_total_filas / $this->max_por_pagina);

        } else {
        	$this->paginacion = 0;
            $this->pagina     = 0;
        }
        if (eregi('LIMIT', $this->sql_query))
        {
        	$this->existe_limit = 1;
        	$limit_explode = explode(' LIMIT', $this->sql_query);
            $this->sql_query = $limit_explode[0];
            $this->limit = $limit_explode[1];
        }
        if (!empty($this->order_by['campo']))
        {
        	$this->orden = 1;
        	$this->orden_por = mysql_escape_string($this->order_by['campo']) . ' ' . ($this->order_by['tipo'] == '1' ? 'DESC' : 'ASC');
        }
        elseif (!empty($atributos['orden_por']) || is_array($atributos['orden_arreglo_por']))
        {
        	$this->orden = 1;
            if (!empty($atributos['orden_por']))
            {
	            if (eregi(' ORDER BY ', $this->sql_query))
	            {
	                $order_explode = explode(' ORDER BY ', $this->sql_query);
	                $this->sql_query = $order_explode[0];
	            }
            	$this->orden_por = $atributos['orden_por'];
	            if (!empty($atributos['orden_tipo']))
	            {
                	$this->orden_por .= ' '.$atributos['orden_tipo'];
                }
            } else {
            	foreach ($atributos['orden_arreglo_por'] as $i => $orden_por)
                {
					$this->orden_por .= $orden_por;
                    if (!empty($atributos['orden_arreglo_tipo'][$i]))
                    {
	                	$this->orden_por .= ' '.$atributos['orden_arreglo_tipo'][$i];
                    }
                    if ($i < (count($atributos['orden_arreglo_por']) - 1))
                    {
                    	$this->orden_por .= ', ';
                    }
                }
            }
        }
    }
    function Estilo($atributos)
    {
        if (!is_array($atributos) && $atributos != '')
        {
        	$estilo = 'class="'.$atributos.'"';
        } elseif (!empty($atributos['class']))
        {
        	$estilo = 'class="'.$atributos['class'].'"';
        }
    	if (!empty($atributos['style']))
        {
        	$estilo .= 'style="'.$atributos['style'].'"';
        }
        return $estilo;
    }
    function Mostrar_Paginacion($atributos = array())
    {
    	if (!$this->paginacion || $this->cant_total_paginas <= 1)
        {
        	return;
        }
    	if (!empty($atributos['url_vars']))
        {
        	$url_vars = $atributos['url_vars'];
        }
        $url_vars .= $this->Parametros_Url(1);
        ?>
        <div <?=$this->Estilo($this->paginacion_estilo)?>>
        <?
	    if ($this->pagina > 1)
        {
        ?>
	    	<a <?=$this->Estilo($atributos)?> href="?<?=$url_vars?>&pagina=<?=($this->pagina - 1)?>">Anterior</a>&nbsp;
	    <?
        }
	    for ($i = 1; $i <= $this->cant_total_paginas; $i++){
	        if ($this->pagina == $i)
            {
            ?>
	            <?=$i?>
	        <?
            } else {
            ?>
				<a <?=$estilo?> href="?<?=$url_vars?>&pagina=<?=$i?>"><?=$i?></a>&nbsp;
	        <?
            }
	    }
	    if ($this->pagina < $this->cant_total_paginas)
        {
        ?>
	   		<a <?=$estilo?> href="?<?=$url_vars?>&pagina=<?=($this->pagina + 1)?>">Siguiente</a>&nbsp;
	    <?
        }
        ?>
        </div>
        <?
    }
    function MostrarTodo()
    {
    	$arreglo = array();
    ?>
    	<table cellspacing="<?=$this->CellSpacing?>" cellpadding="<?=$this->CellPadding?>" width="<?=$this->Width?>" class="<?=$this->Class?>">
        	<tr id="titulos_admin">
    <?
    	$i = 0;
    	foreach ($titulos as $valor)
        {
        	$arreglo[$i] = $valor;
        ?>
        		<td class="<?=$this->Estilo_Titulos?>"><?=$valor['titulo']?></td>
        <?
        }
 	   ?>
        	</tr>
       <?

        $query = mysql_query($sql_query, $conn);
        $i = 0;
        while ($row = mysql_fetch_assoc($query))
        {
        ?>
        	<tr>
        <?
			foreach($row as $campo => $valor)
            {
            ?>
                	<td <?=$this->Estilo($titulos[$i])?>><?=$valor?></td>
            <?

            }
        ?>
        	</tr>
        </table>
        <?
        	$i++;
        }
    }
    function Mostrar()
    {
    	$arreglo = array();
    ?>
    	<table cellspacing="<?=$this->CellSpacing?>" cellpadding="<?=$this->CellPadding?>" width="<?=$this->Width?>" class="<?=$this->Class?>">
        	<tr id="titulos_admin">
    <?
    	$i = 0;
    	$text                = false;
    	$checkbox            = false;
    	$onclick_method      = false;
    	$onclick_open_method = false;
    	$onclick_open_type   = false;
    	$onclick_open_campos = false;
		$onclick_open        = false;
		$onsubmit = false;
		$onclick = false;
		$onsubmit_method = false;
    	foreach ($this->titulo as $valor)
        {
        	if (!is_array($valor)) continue;
        	if ($valor['order'] !== false)
        	{
        		$valor['order'] = true;
        	}
        	if ($valor['type'] = 'checkbox')
        	{
        		$checkbox = true;
        	}
        	if ($valor['type'] = 'text')
        	{
        		$text = true;
        	}
        	if (is_array($valor['onsubmit']))
        	{
       			$onsubmit = true;
        		$onsubmit_method = $valor['onsubmit']['method'];
        	}
        	if (is_array($valor['onclick']))
        	{
        		$onclick = true;
        		$onclick_method = $valor['onclick']['method'];
        		if (is_array($valor['onclick']['open']))
        		{
        			$onclick_open = true;
        			$onclick_open_method = $valor['onclick']['open']['method'];
        			$onclick_open_type   = $valor['onclick']['open']['type'];
        			$onclick_open_campos = $valor['onclick']['open']['campos'];

        			if ($onclick_open_type == 'layer')
        			{
        				$Layers[] = $valor['campo'];
        			}
        		}
        	}
        	$arreglo[strtolower($valor)] = strtolower($valor);
        ?>
        		<td class="<?=$this->Estilo_Titulos?>">
        			<?php
        			if ($valor['order'])
        			{
        			?>
        			<a class="titulo_orden" href="?<?=$this->Parametros_Url(2)?>&order_by=<?=$valor['campo']?>&orderType=<?=($this->order_by['campo'] == $valor['campo'] ? intval(!$this->order_by['tipo']) : 0)?>"><?=$valor['titulo']?><?php if ($this->order_by['campo'] == $valor['campo'] && ($this->order_by['tipo'] == '0' || !empty($this->order_by['tipo']))){echo ' '.$this->order_by['tipo'] == '1' ? '<img src="img/arriba.gif" />' : '<img src="img/abajo.gif" />';}?></a>
        			<?php
        			} else {
        			?>
        			<?=$valor['titulo']?>
        			<?php
					}
        			?>

				</td>
        <?
        }
 	   ?>
        	</tr>
       <?

        if (count($this->TEMP) == 0)
        {
        ?>
        </table>
        <?
        	return;
        }
        ?>
        <?php
		if ($checkbox ||$text)
		{
			$this->IncludeScriptaculous();
		}
		?>
        <script type="text/javascript">
        	<?php
        	if (count($Layers) > 0)
        	{
			?>
        	var Layers = '||<?=implode('||', $Layers)?>||';
        	<?
        	} else {
        	?>
        	var Layers = '||||';
        	<?php
        	}
			?>
			var ultimo = -1;

			<?php
			if ($checkbox ||$text)
			{
		        $this->__Controller();
		        if ($onclick === true)
		        {
		        	if ($checkbox)
		        	{
		        		$this->__CambioCheckBox($onclick_method, $onclick_open_type);
		        	}
		        	if ($onclick_open === true)
		        	{
		        		$this->__CambioLayer($onclick_open_campos);
		        	}
		        }
		        if ($onsubmit === true)
		        {
		        	if ($text)
		        	{
		        		$this->__CambioText($onsubmit_method);
		        	}

		        }
			}
			?>
        </script>
        <?
        $fila_nro = 0;
        foreach ($this->TEMP as $fila)
        {
        ?>
        	<tr <?=$this->Estilo($this->titulo)?> <?=$this->Estilo($fila['FILA'])?>>
        <?
	        $i = 0;
	        $ID = $fila[$this->primaryKey];
            foreach($this->titulo as $valor)
            {
		    	$text                = false;
		    	$checkbox            = false;
		    	$onclick_method      = false;
		    	$onclick_open_method = false;
		    	$onclick_open_type   = false;
		    	$onclick_open_campos = false;
				$onclick_open        = false;
				$onsubmit = false;
				$onclick = false;
				$onsubmit_method = false;

	        	if (is_array($valor['onsubmit']))
	        	{
	       			$onsubmit = true;
	        		$onsubmit_method = $valor['onsubmit']['method'];
	        	}
	        	if (is_array($valor['onclick']))
	        	{
	        		$onclick_method = $valor['onclick']['method'];
	        		$onclick_open = is_array($valor['onclick']['open']);
	        		if ($onclick_open)
	        		{
	        			$onclick_open_method = $valor['onclick']['open']['method'];
	        			$onclick_open_type   = $valor['onclick']['open']['type'];
	        			$onclick_open_campos = $valor['onclick']['open']['campos'];
	        		}
	        	}
	        	$i++;
	        	$selected = $fila[$valor['campo']] == '1' ? 'checked' : '';
	        	$campo = $fila[$valor['campo']];
	        	$form = '<div id="formularioAJAX_'.$valor['campo'].$fila_nro.'"></div>';
	        	if ($valor['type'] == 'checkbox')
	        	{
		    		$campo = '<input style="margin: 0 auto;" id="'.$ID.'" type="checkbox" name="'.$valor['campo'].'" value="1" '.$selected.' onclick="Controller(this, \''.$ID.'\', \''.$valor['campo'].'\', \''.$fila_nro.'\', \'checkbox\', \''.$onclick_method.'\');" />';
		        	if ($onclick_open_type == 'layer')
		        	{
		        		$form = '<form id="formularioAJAX_'.$valor['campo'].$fila_nro.'" name="formularioAJAX_'.$valor['campo'].$fila_nro.'" onsubmit="return Controller(this, \''.$ID.'\', \''.$valor['campo'].'\', \''.$fila_nro.'\', \'layer\', \''.$onclick_method.'\');">';
		        		$form .= $this->__armarInputs($onclick_open_campos, $fila);
		        		$form .= '
		        				<input class="botonLayer" type="submit" value="Enviar"> <input class="botonLayer" type="button" value="Cancelar" onclick="$(\'layer_'.$valor['campo'].'_'.$fila_nro.'\').style.display = \'none\';">
		        				<input name="id" type="hidden" value="'.$ID.'">
							</form>';
		        	}
	        	} elseif ($valor['type'] == 'text') {
	        		$width = is_array($valor['onsubmit']) && !empty($valor['onsubmit']['width']) ? 'width: '.$valor['onsubmit']['width'].';' : '';
	        		$campo = '<form style="margin: 0px; padding: 0px;" onsubmit=" return Controller($(\'text_'.$valor['campo'].$fila_nro.'\'), \''.$ID.'\', \''.$valor['campo'].'\', \''.$fila_nro.'\', \'text\', \''.$onsubmit_method.'\');"><input style="'.$width.'" onkeypress="" class="in" type="text" id="text_'.$valor['campo'].$fila_nro.'" name="'.$valor['campo'].'" value="'.$fila[$valor['campo']].'"> <input type="image" src="img/save.png" value="Enviar"></form>
					';
				}

				$div = '';
				if (!empty($valor['type']))
				{
	        		$div = '<br><div style="position: absolute; display: none;" class="layer" id="layer_'.$valor['campo'].'_'.$fila_nro.'">
	        			<div><b>'.ucfirst($this->primaryKey).': '.$ID.'</b></div>
	        			<div id="layer_'.$valor['campo'].'_'.$fila_nro.'_salvando" style="display: none;">Salvando...</div>';
		        	$div .= $form;
		        	$div .= '</div>';
				}
            ?>
               	<td <?=$this->Estilo($valor)?>><?=$campo?><?=$div?></td>
            <?

            }
            $fila_nro++;
        ?>
        	</tr>
        <?
        }
        ?>
        </table>
        <?
    }

	function __armarInputs($campos, $valores)
	{
		$salida = '';
		foreach($campos as $campo => $valor)
		{
			$salida .= '<label for="'.$campo.'">'.str_replace('_', ' ', ucfirst(strtolower($campo))).':</label><br>';
			switch($valor['type'])
			{
				case 'checkbox':
					$checked = ($valores[$campo]) ? 'checked' : '';
					$salida .= '<input type="checkbox" '.$checked.' name="'.$campo.'" value="1">';
					break;
				case 'text':
				default:
					$salida .= '<input class="in" type="text" name="'.$campo.'" value="'.htmlentities($valores[$campo]).'">';
			} // switch
			$salida .= '<br>';
		}
		return $salida;
	}

	function __Controller()
	{
	?>
 		function Controller(obj, id, name, num, type, METHOD)
    	{
    		if (ultimo != -1)
    		{
    			ultimo.style.display = 'none';
    		}
    		ultimo = $('layer_' + name + '_' + num);

    		$('layer_' + name + '_' + num).style.display = 'block';
			$('layer_' + name + '_' + num + '_salvando').style.display = 'block';
        	$('formularioAJAX_' + name + num).style.display = 'none';

        	if (type == 'checkbox')
        	{
        		if (METHOD == 'ajax')
        		{
        			CambioCheckBoxAJAX(obj, id, name, num);
        		}

        	} else if (type == 'text') {

        		if (METHOD == 'ajax')
        		{
        			return CambioTextAJAX(obj, id, name, num);
        		}

        	} else if (type == 'layer') {

        		if (METHOD == 'ajax')
        		{
        			return CambioLayerAJAX(obj, id, name, num);
        		}

			}
			return true;
		}
	<?
	}
	function __CambioCheckBox($type, $open_type)
	{
	?>
			function getPHPcodeCheckBox(campo)
			{
			var PHP = "\ndefine('APP_PATH',       dirname($_SERVER['DOCUMENT_ROOT'].$_SERVER['PHP_SELF']));\n\n" +
			"include_once(APP_PATH . '/Configuracion.inc.php');\n\n" +
			"if (DB_ACTIVE)\n\n" +
			"{\n" +
				"include(BASE_FRAMEWORK . '/Connection.inc.php');\n" +
			"}\n\n" +
				"$checkbox = $_REQUEST['checkbox'];\n" +
				"$campo    = $_REQUEST['campo'];\n" +
				"$id       = $_REQUEST['id'];\n\n" +
				"$sql = \"UPDATE `<?=$this->tabla?>` SET `" + campo + "` = '$checkbox' WHERE `<?=$this->primaryKey?>` = '$id';\";\n" +
				"mysql_query($sql, $conn);\n\n" +
				"$error = mysql_error($conn);\n\n" +
				"if (!empty($error)) echo $sql.\"\\n\".$error;";

				return PHP;
			}
        	function CambioCheckBoxAJAX(chk, id, name, num)
        	{
				if (typeof CustomCambioCheckBoxAJAX == "function")
				{
					CustomCambioCheckBoxAJAX(obj, name, num);
				} else {
	        		<?php
	        		if ($open_type == 'layer')
	        		{
	        		?>
	        		if (chk.checked && Layers.indexOf('||' + chk.name + '||') != -1)
	        		{
	        			$('formularioAJAX_' + name + num).style.display = 'block';
		        	}
	        		<?
	        		}
	        		?>
					var valor = 1;
					if (!chk.checked)
					{
						valor = 0;
						$('formularioAJAX_' + name + num).style.display = 'none';
					}
		            var opt = {
		                // Use POST
		                method: 'post',
		                // Send this lovely data
		                postBody: 'campo=' + name + '&checkbox=' + valor + '&id=' + id,
		                // Handle successful response
		                onSuccess: function(t) {
		                	if (t.responseText != '')
		                	{
		                		alert('ERROR:\n' + t.responseText);
		                	}
		                	$('layer_' + name + '_' + num + '_salvando').style.display = 'none';
		                	if (!chk.checked || Layers.indexOf('||' + chk.name + '||') == -1)
		                	{
			                	$('formularioAJAX_' + name + num).style.display = 'none';
		                		$('layer_' + name + '_' + num).style.display = 'none';
		                	} else {
		                		$('formularioAJAX_' + name + num).style.display = 'block';
		                	}
	                	},
		                // Handle 404
		                on404: function(t) {
		                    alert('El archivo "AJAX.<?=$this->nombre?>_' + name + '.CambioCheckBoxAJAX.php" no existe. Creelo y aplique la logica necesaria para esta funcion.\nTambien puede crear una funcion de Javascript llamada "CustomCambioCheckBox" donde podra hacer este request a la pagina o todo lo que desee.\n\nRecuerde que las variables que se envian a este archivo son:\n- "campo" con el nombre del campo que se va a modificar su valor\n- "checkbox" con 1 o 0 segun lo que se halla seleccionado\n- "id" con el ID del item.\n\nA modo de ejemplo le recomendamos el siguiente script:\n' + getPHPcodeCheckBox(name));
		                },
		                // Handle other errors
		                onFailure: function(t) {
		                    alert('El archivo "AJAX.<?=$this->nombre?>_' + name + '.CambioCheckBoxAJAX.php" no existe. Creelo y aplique la logica necesaria para esta funcion.\nTambien puede crear una funcion de Javascript llamada "CustomCambioCheckBox" donde podra hacer este request a la pagina o todo lo que desee.\n\nRecuerde que las variables que se envian a este archivo son:\n- "campo" con el nombre del campo que se va a modificar su valor\n- "checkbox" con 1 o 0 segun lo que se halla seleccionado\n- "id" con el ID del item.\n\nA modo de ejemplo le recomendamos el siguiente script:\n' + getPHPcodeCheckBox(name));
//		                    alert('Error (AJAX.<?=$this->nombre?>_' + name + '.CambioCheckBoxAJAX.php) ' + t.status + ' -- ' + t.statusText);
		                }
		            }
	            	var a = new Ajax.Request('AJAX.<?=$this->nombre?>_' + name + '.CambioCheckBoxAJAX.php', opt);
				}
        	}
	<?
	}
	function __CambioLayer($open_campos)
	{
	?>
		function getPHPcodeLayer()
		{
			var PHP = "\ndefine('APP_PATH',       dirname($_SERVER['DOCUMENT_ROOT'].$_SERVER['PHP_SELF']));\n\n" +
			"include_once(APP_PATH . '/Configuracion.inc.php');\n\n" +
			"if (DB_ACTIVE)\n\n" +
			"{\n" +
				"include(BASE_FRAMEWORK . '/Connection.inc.php');\n" +
			"}\n\n" +
			<?php
			$campos = array();
			foreach ($open_campos as $campo => $v)
			{
			?>
			"$<?=$campo?> = $_REQUEST['<?=$campo?>'];\n" +
			<?
				$campos[] = '`'.$campo.'` = \'$'.$campo.'\'';
			}
			?>
			"$id       = $_REQUEST['id'];\n\n" +
			"if (empty($id))\n" +
			"{\n" +
				"die(\"ID no recibido correctamente (vacio)\");\n" +
			"}\n\n" +
			"$sql = \"UPDATE `<?=$this->tabla?>` SET <?=implode(', ', $campos)?> WHERE `<?=$this->primaryKey?>` = '$id';\";\n" +
			"mysql_query($sql, $conn);\n\n" +
			"$error = mysql_error($conn);\n\n" +
			"if (!empty($error)) echo $sql.\"\\n\".$error;";

			return PHP;
		}
    	function CambioLayerAJAX(obj, id, name, num)
    	{
			if (typeof CustomCambioLayerAJAX == "function")
			{
				CustomCambioLayerAJAX(obj, name, num);
			} else {
	            var opt = {
	                // Use POST
	                method: 'post',
	                // Send this lovely data
	                postBody: Form.serialize('formularioAJAX_' + name + num),
	                // Handle successful response
	                onSuccess: function(t) {
	                	if (t.responseText != '')
	                	{
	                		alert('ERROR:\n' + t.responseText);
	                	} else {
	                		$('layer_' + name + '_' + num).style.display = 'none';
							$('layer_' + name + '_' + num + '_salvando').style.display = 'none';
	                		$('formularioAJAX_' + name + num).style.display = 'block';
	                	}
                	},
	                // Handle 404
	                on404: function(t) {
	                	var error = 'El archivo "AJAX.<?=$this->nombre?>_' + name + '.CambioLayerAJAX.php" no existe. Creelo y aplique la logica necesaria para esta funcion.\nTambien puede crear una funcion de Javascript llamada "CustomCambioLayer" donde podra hacer este request a la pagina o todo lo que desee.\n\nRecuerde que las variables que se envian a este archivo son todos los campos que usted desea que se puedan modificar y el "id" del item.\n\nA modo de ejemplo le recomendamos el siguiente script:\n' + getPHPcodeLayer();
	                    alert(error);
	                },
	                // Handle other errors
	                onFailure: function(t) {
//	                    alert('Error (AJAX.<?=$this->nombre?>_' + name + '.CambioLayerAJAX.php) ' + t.status + ' -- ' + t.statusText);
	                	var error = 'El archivo "AJAX.<?=$this->nombre?>_' + name + '.CambioLayerAJAX.php" no existe. Creelo y aplique la logica necesaria para esta funcion.\nTambien puede crear una funcion de Javascript llamada "CustomCambioLayer" donde podra hacer este request a la pagina o todo lo que desee.\n\nRecuerde que las variables que se envian a este archivo son todos los campos que usted desea que se puedan modificar y el "id" del item.\n\nA modo de ejemplo le recomendamos el siguiente script:\n' + getPHPcodeLayer();
	                    alert(error);
	                }
	            }
            	var a = new Ajax.Request('AJAX.<?=$this->nombre?>_' + name + '.CambioLayerAJAX.php', opt);

            	return false;
			}
    	}
	<?
	}
	function __CambioText()
	{
	?>
		function getPHPcodeText(name)
		{
			var PHP = "\ndefine('APP_PATH',       dirname($_SERVER['DOCUMENT_ROOT'].$_SERVER['PHP_SELF']));\n\n" +
			"include_once(APP_PATH . '/Configuracion.inc.php');\n\n" +
			"if (DB_ACTIVE)\n\n" +
			"{\n" +
				"include(BASE_FRAMEWORK . '/Connection.inc.php');\n" +
			"}\n\n" +
			"$" + name + " = $_REQUEST['" + name + "'];\n\n" +
			"$id       = $_REQUEST['id'];\n\n" +
			"if (empty($id))\n" +
			"{\n" +
				"die(\"ID no recibido correctamente (vacio)\");\n" +
			"}\n\n" +
			"$sql = \"UPDATE `<?=$this->tabla?>` SET `" + name + "` = '$" + name + "' WHERE `<?=$this->primaryKey?>` = '$id';\";\n" +
			"mysql_query($sql, $conn);\n\n" +
			"$error = mysql_error($conn);\n\n" +
			"if (!empty($error)) echo $sql.\"\\n\".$error;";

			return PHP;
		}
    	function CambioTextAJAX(obj, id, name, num)
    	{
			if (typeof CustomCambioTextAJAX == "function")
			{
				CustomCambioTextAJAX(obj, name, num);
			} else {
	            var opt = {
	                // Use POST
	                method: 'post',
	                // Send this lovely data
	                postBody: name + '=' + obj.value + '&id=' + id,
	                // Handle successful response
	                onSuccess: function(t) {
	                	if (t.responseText != '')
	                	{
	                		alert('ERROR:\n' + t.responseText);
	                	} else {
	                		$('layer_' + name + '_' + num).style.display = 'none';
							$('layer_' + name + '_' + num + '_salvando').style.display = 'none';
	                		$('formularioAJAX_' + name + num).style.display = 'block';
	                	}
                	},
	                // Handle 404
	                on404: function(t) {
	                	var error = 'El archivo "AJAX.<?=$this->nombre?>_' + name + '.CambioTextAJAX.php" no existe. Creelo y aplique la logica necesaria para esta funcion.\nTambien puede crear una funcion de Javascript llamada "CustomCambioLayer" donde podra hacer este request a la pagina o todo lo que desee.\n\nRecuerde que las variables que se envian a este archivo son:\n-"' + name + '"\n-"id" del item.\n\nA modo de ejemplo le recomendamos el siguiente script:\n' + getPHPcodeText(name);
	                    alert(error);
	                },
	                // Handle other errors
	                onFailure: function(t) {
//	                    alert('Error (AJAX.<?=$this->nombre?>_' + name + '.CambioTextAJAX.php) ' + t.status + ' -- ' + t.statusText);
	                	var error = 'El archivo "AJAX.<?=$this->nombre?>_' + name + '.CambioTextAJAX.php" no existe. Creelo y aplique la logica necesaria para esta funcion.\nTambien puede crear una funcion de Javascript llamada "CustomCambioLayer" donde podra hacer este request a la pagina o todo lo que desee.\n\nRecuerde que las variables que se envian a este archivo son:\n-"' + name + '"\n-"id" del item.\n\nA modo de ejemplo le recomendamos el siguiente script:\n' + getPHPcodeText(name);
	                    alert(error);
	                }
	            }
            	var a = new Ajax.Request('AJAX.<?=$this->nombre?>_' + name + '.CambioTextAJAX.php', opt);

            	return false;
			}
    	}
	<?
	}
    function Cargar()
    {
    	if (!empty($_REQUEST['radio_selector']) || $_REQUEST['radio_selector'] == "0")
        {
	    	$this->Radio_selector = $_REQUEST['radio_selector'];
        } else {
	    	$this->Radio_selector = $this->Selector_default;
        }
    	if ($this->Cant_selectores > 0)
        {
	        if (eregi(' WHERE ', $this->sql_query))
	        {
	            $this->sql_query .= ' AND '.$this->Selectores[$this->Radio_selector]['condicion'];
	        } else {
	            $this->sql_query .= ' WHERE '.$this->Selectores[$this->Radio_selector]['condicion'];
            }
        }
    	if ($this->orden)
        {
	        $this->sql_query .= ' ORDER BY '.$this->orden_por;
        }
    	if ($this->paginacion)
        {
	        $this->sql_query .= ' LIMIT '.$this->actual.', '.$this->max_por_pagina;
        } elseif ($this->existe_limit) {
	        $this->sql_query .= ' LIMIT '.$this->limit;
        }
    	$this->query = @mysql_query($this->sql_query, $this->conn);
        $error     = @mysql_error($this->conn);

        if (!empty($error))
        {
            Debug::Mostrar("Se ha producido un error en una consulta a la Base de Datos - Error 1: Cargar()<br>".$this->sql_query."<br>".$error);
        }
    }
    function Guardar_Todos()
    {
    	$n = array();
    	while ($row = @mysql_fetch_assoc($this->query))
        {
		    $this->TEMP[$this->i] = $row;
	        $this->i++;
        }
    }
    function Siguiente()
    {
    	if ($row = @mysql_fetch_object($this->query))
        {
            return $row;
        }
        return 0;
    }
    function Guardar($H)
    {
    	$n = array();
    	foreach ($H as $campo => $value)
        {
        	$n[$campo] = (empty($value) ? '--' : $value);
        }
	    $this->TEMP[$this->i] = $n;
		unset($H);

        $this->i++;
    }
    function Agregar_selector($nombre, $condicion, $defaults = "")
    {
    	$this->Selectores[$this->Cant_selectores]['nombre']    = $nombre;
    	$this->Selectores[$nombre]                             = $this->Cant_selectores;
    	$this->Selectores[$this->Cant_selectores]['condicion'] = $condicion;
        if ($defaults == 1)
        {
	        $this->Selector_default    = $this->Cant_selectores;
        }
        $this->Cant_selectores++;
    }
    function Selector_default($nombre)
    {
        $this->Selector_default    = $this->Selectores[$nombre];
    }

    function Radio_selector()
    {
        return $this->Selectores[$this->Radio_selector]['nombre'];
    }
    function Parametros_Url($sin = -1)
    {
    	if ($sin != 3)
    	{
    		$url = 'page=' . $this->page;
    	}
    	if ($sin != 0 && $this->Cant_selectores > 0)
        {
        	$url .= '&radio_selector='.$this->Radio_selector;
        }
    	if ($sin != 1 && $this->paginacion == 1)
        {
        	$url .= '&pagina='.$this->pagina;
        }
        if ($sin != 2 && $this->order_by['campo'] != '')
        {
        	$url .= '&order_by=' . $this->order_by['campo'];
        	$url .= '&orderType=' . $this->order_by['tipo'];
        }
        return $url;
    }
    function Mostrar_selectores()
    {
    	if ($this->Cant_selectores == 0)
        {
        	return;
        }
    	?>
		<table width="100%" border="0" cellspacing="0" cellpadding="0">
        	<script language="Javascript">
	            function Reload_selector(radio)
	            {
	                var link = '?radio_selector=' + radio.value + '&pagina=<?=$this->pagina?>';
	                location.replace(link);
	            }
            </script>
	        <tr>
	            <td class="t">
                	<form name="form_selector">
	                    <?
	                    foreach ($this->Selectores as $selector => $values)
                        {
                        	if (!is_array($values))
                            {
                            	continue;
                            }
	                    ?>
                    	<input type="radio" name="radio_selector" value="<?=$selector?>" <? if ($this->Radio_selector == $selector) { print("checked"); }?> onclick="Reload_selector(this);"> <?=$values['nombre']?>
				        <?
                        	if ($selector < ($this->Cant_selectores-1))
                            {
                            ?>
                            &nbsp;-
                            <?
                            }
                        }
					    ?>
                    </form>
                </td>
            </tr>
        </table>
	    <?
    }
    function Mostrar_Buscador()
	{
    	$seccion = 'Ajax/Seccion.'.$this->nombre.'.Ajax.Autocompleter.php';
        if (empty($this->nombre) || !@file_exists(APP_PATH.'/'.$seccion))
        {
            Debug::Mostrar("Error al crear el buscador. Nombre de Seccion no seteado o archivo de Autocompleter <b>".$seccion."</b> no creado.");
        }
    ?>
    	<input type="text" name="seccion_buscador_query" id="seccion_buscador_query" <?if (!empty($this->Buscador_class)) {?>class="<?=$this->Buscador_class?>"<?}?>>
        <span  id="seccion_buscador_loader" style="display: none;"><img src="img/loader.gif"></span>
        <div class="auto_complete" id="ac_update" style="display:none;"></div>
        <script type="text/javascript" language="javascript" charset="utf-8">
	          $('seccion_buscador_query').onkeypress = killIt;

	          new Ajax.CachedAutocompleter('seccion_buscador_query','ac_update','<?=$seccion?>', {minChars: 1, paramName: "query", afterUpdateElement: actualizar, indicator: seccion_buscador_loader });
        </script>
    <?
    }
    function IncludeScriptaculous()
    {
    	if ($this->scriptaculous != 'active')
    	{
    		$this->scriptaculous = 'active';
    ?>
	    <script src="<?=BASE_JAVASCRIPT?>/prototype.js" type="text/javascript"></script>
	    <script src="<?=BASE_JAVASCRIPT?>/effects.js" type="text/javascript"></script>
        <script src="<?=BASE_JAVASCRIPT?>/dragdrop.js" type="text/javascript"></script>
	    <script src="<?=BASE_JAVASCRIPT?>/controls.js" type="text/javascript"></script>
    <?
    	}
	}
    function Configurar_Buscador($archivo, $parametro_id)
    {
    ?>
    	<?=$this->IncludeScriptaculous();?>
	    <script src="<?=BASE_JAVASCRIPT?>/CachedAutocompleter.js" type="text/javascript"></script>
	    <script type="text/javascript" language="javascript" charset="utf-8">
	          function killIt (e)
	          {
	                if (e.keyCode == 13)
	                {
	                    return false;
	                }
	                return true;
	          }
	          function actualizar(input, li)
	          {
	          	  var archivo = '<?=$archivo?>';
	          	  var char    = '?';
	              if (li.id != 0)
	              {
	              	  if (archivo.indexOf('?') != -1)
	              	  {
	              	  	char = '&';
	              	  }
                      location.href = '<?=$archivo?>' + char + '<?=$parametro_id?>=' + li.id + '<?=$this->Parametros_Url(3)?>';
	              }
	          }
	    </script>
    <?
    }
}
?>